package br.org.ifrr.repository;

import java.io.Serializable;
import java.util.List;

import javax.inject.Inject;
import javax.persistence.EntityManager;

import org.apache.commons.lang3.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

import br.org.ifrr.model.Grupo;
import br.org.ifrr.repository.filter.GrupoFilter;

public class Grupos implements Serializable {

	private static final long serialVersionUID = 1L;

	@Inject
	private EntityManager manager;

	public Grupo guardar(Grupo grupo) {
		return manager.merge(grupo);
	}

	public Grupo porId(Long id) {
		return manager.find(Grupo.class, id);
	}

	public List<Grupo> todos() {
		return manager.createQuery("from Grupo", Grupo.class).getResultList();
	}

	/*
	 * public Grupo porCnpj(String cnpj) {
	 * 
	 * try { return
	 * manager.createQuery("from Grupo where upper(cnpj) = :cnpj",Grupo.class)
	 * .setParameter("cnpj", cnpj.toUpperCase()).getSingleResult(); } catch
	 * (NoResultException e) { return null; } }
	 */

	@SuppressWarnings("unchecked")
	public List<Grupo> filtrados(GrupoFilter filtro) {
		Session session = manager.unwrap(Session.class);
		Criteria criteria = session.createCriteria(Grupo.class);

		if (StringUtils.isNotBlank(filtro.getNome())) {
			criteria.add(Restrictions.ilike("grupo", filtro.getNome(),
					MatchMode.ANYWHERE));
		}

		return criteria.addOrder(Order.asc("grupo")).list();
	}

	public List<Grupo> porGrupao(String nomeGrupo) {

		return this.manager.createQuery("from Grupo where upper(nomeGrupo) like :nomeGrupo",Grupo.class)
				.setParameter("nomeGrupo", nomeGrupo.toUpperCase() + "%")
				.getResultList();
	}
	

	public List<Grupo> porGrupoDescricao(String nomeGrupo) {

		return this.manager.createQuery("from Grupo where upper(nomeGrupo) like :nomeGrupo",	Grupo.class)
				.setParameter("nomeGrupo", nomeGrupo.toUpperCase() + "%")
				.getResultList();
	}
}
